context
今天需要用到一个正则,正则本身很简单,就是功能是限制UITextField
只能输入数字,仅仅限制键盘类型是不够的.
正则 ^[0-9]*$
,说到这里了,顺便记录一下,匹配中文的正则表达式是: [\u4e00-\u9fa5]
根据自己以前的知识,iOS有专门的正则表达式类. 一般的步骤是这样的:1
2
3
4
5
6
7NSString *searchText = @"source Strings ";
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?:[^,])*\\." options:NSRegularExpressionCaseInsensitive error:&error];
NSTextCheckingResult *result = [regex firstMatchInString:searchText options:0 range:NSMakeRange(0, [searchText length])];
if (result) {
NSLog(@"%@\n", [searchText substringWithRange:result.range]);
}
但是这样就为了验证是不是数字,我感觉太笨重了,后来经过查询,发现了一种好用的实现:来源网址
1 | NSString *email = @“nijino_saki@163.com”; |
整段代码只涉及一个 NSPredicate
对象,条理清楚.
顺带的,又发现了NSString
自己也有一个直接使用正则的功能.对于单纯的验证是否匹配来说,这个应该是最简单的方式了.
1 | NSString *searchText = @"// Do any additional setup after loading the view, typically from a nib."; |
发现新知识的快乐
在使用 NSPredicate
的实现方式中, 出现了利用格式化字符串来匹配的内容.自己对这块不了解( 虽然有在 MagicalRecord中使用过 NSPredicate ,但是只是用来判断相等),于是想把相关内容搞明白. 最后找到了这篇文章
基本用法
1 | NSPredicate *predicate = [NSPredicate predicateWithFormat:(NSString *), ...]; |
1 | (1)比较运算符>,<,==,>=,<=,!= |
果真是一个强大而灵活的对象…
附录:常用正则表达式
1 | 常用的第三方正则库: |